//
//  KQChatHelper.swift
//  KangYunGuanJia
//
//  Created by zhouxiang on 2020/9/17.
//  Copyright © 2020 zhoux@zzkqdc.com. All rights reserved.
//

import UIKit
import KQChatSDK

public class KQChatHelper: NSObject {
    
    // MARK: - 创建聊天
    
    /// 创建会话
    /// - Parameters:
    ///   - userId: 用户Id
    ///   - isVerified: 是否认证业主
    ///   - isBindWechat: 是否绑定微信
    ///   - block: 结果
//    public class func createSingleConversation(userId: String?, isVerified: Bool?, isBindWechat: Bool?, block: @escaping(_ error: NSError?)->Void) {
//
//        if (userId ?? "").count == 0 {
//            block(NSError(domain: "IM错误", code: -110, userInfo: [NSLocalizedDescriptionKey: "用户ID为空"]))
//            return
//        }
//
//        if (isVerified ?? false) == false && (isBindWechat ?? false) == false {
//            block(NSError(domain: "IM错误", code: -110, userInfo: [NSLocalizedDescriptionKey: "用户未认证并且未绑定微信"]))
//            return
//        }
//        let complete : JMSGCompletionHandler? = {
//            (result, error) in
//            if error == nil {
//                NotificationCenter.default.post(name: NSNotification.Name(rawValue: kUpdateConversation), object: nil, userInfo: nil)
//                block(nil)
//            } else {
//                block(error as NSError?)
//            }
//        }
//        if (userId ?? "") == "0000" {
//            JMSGConversation.createSingleConversation(withUsername: userId!, completionHandler: complete)
//        } else {
//            JMSGConversation.createSingleConversation(withUsername: userId ?? "", appKey:
//                                                        "59a2c0fcc12a54cb14afdbfc" ,completionHandler: complete)
//        }
//
//
//    }
    
    /// 转发图片
    public class func sendSingleConversation(image: UIImage?, userId: String?, isVerified: Bool?, isBindWechat: Bool?, block: @escaping(_ error: NSError?)->Void) {
        guard let image = image else {
            block(NSError(domain: "IM错误", code: -110, userInfo: [NSLocalizedDescriptionKey: "未传入照片"]))
            return
        }
        
        if (userId ?? "").count == 0 {
            block(NSError(domain: "IM错误", code: -110, userInfo: [NSLocalizedDescriptionKey: "用户ID为空"]))
            return
        }
        
        if (isVerified ?? false) == false && (isBindWechat ?? false) == false {
            block(NSError(domain: "IM错误", code: -110, userInfo: [NSLocalizedDescriptionKey: "用户未认证并且未绑定微信"]))
            return
        }
        
//        JMSGConversation.createSingleConversation(withUsername: userId!) { (result, error) in
//            if error == nil {
//                let conv = result as! JMSGConversation
//                NotificationCenter.default.post(name: NSNotification.Name(rawValue: kUpdateConversation), object: nil, userInfo: nil)
//                self.send(forImage: image, conversation: conv)
//            } else {
//                block(error as NSError?)
//            }
//        }
        
    }
    
    private class func send(forImage image: UIImage, conversation: WFCCConversation) {
//        let data = image.jpegData(compressionQuality: 1.0)!
//        let content = JMSGImageContent(imageData: data)
//
//        let message = JMSGMessage.ex.createMessage(conversation, content!, nil)
//        if message == nil {
//            return
//        }
//        conversation.send(message!, optionalContent: JMSGOptionalContent.ex.default)
        
    }
    
    /// IM根据error获取错误描述
    public class func getErrorlocalizedDescription(error: NSError?) -> String {
        guard let error = error else {
            return ""
        }
        //REST API -> Server ErrorCode定义
        if error.code == 898000 {
            return "内部错误"
        }
        if error.code == 898000 {
            return "内部错误"
        }
        if error.code == 898001 {
            return "用户已存在"
        }
        if error.code == 898002 {
            return "用户不存在, 并且指出了不存在的用户名称"
        }
        if error.code == 898003 {
            return "请求参数不合法"
        }
        if error.code == 898004 {
            return "更新密码操作，用户密码错误"
        }
        if error.code == 898006 {
            return "Group id不存在"
        }
        if error.code == 898007 {
            return "校验信息为空"
        }
        if error.code == 898008 {
            return "校验失败"
        }
        if error.code == 898009 {
            return "appkey不存在"
        }
        if error.code == 898010 {
            return "API请求 token 过期。正常情况下SDK会自动重新获取 token。"
        }
        if error.code == 898011 {
            return " 查询的appkey不具备跨应用权限 或者appkey不存在"
        }
        if error.code == 898030 {
            return "系统繁忙，稍后重试"
        }
        if error.code == 898031 {
            return "音视频服务还未开通，请参考doc和portal里的规则开通服务"
        }
        if error.code == 899000 {
            return "系统内部错误"
        }
        if error.code == 899001 {
            return "用户已存在"
        }
        if error.code == 899002 {
            return "用户不存在"
        }
        if error.code == 899003 {
            return "参数错误，Request Body参数不符合要求;resend 值不符合要求;用户名或者密码不合法;群组Group id不合法"
        }
        if error.code == 899006 {
            return "Group id 不存在"
        }
        if error.code == 899007 {
            return "校验信息为空"
        }
        if error.code == 899008 {
            return "校验失败"
        }
        if error.code == 899009 {
            return "Appkey不存在"
        }
        if error.code == 899011 {
            return "重复添加群成员"
        }
        if error.code == 899012 {
            return "没有足够位置添加此次请求的成员"
        }
        if error.code == 899013 {
            return "注册列表大于500，批量注册最大长度为500"
        }
        if error.code == 899014 {
            return "添加操作操作成功 remove操作有username不存在讨论组中 remove失败"
        }
        if error.code == 899015 {
            return " 用户加入讨论组达到上限"
        }
        if error.code == 899016 {
            return "用户没有管理员权限发送信息"
        }
        if error.code == 899017 {
            return "用户已经被添加进黑名单"
        }
        if error.code == 899018 {
            return "管理员不能被添加进黑名单"
        }
        if error.code == 899019 {
            return "删除目标黑名单用户不存在黑名单中"
        }
        if error.code == 899020 {
            return "跨应用失败"
        }
        if error.code == 899021 {
            return "查询失败 应该使用跨应用api"
        }
        if error.code == 899043 {
            return "已经设置此用户为消息免打扰，重复设置错误"
        }
        if error.code == 899044 {
            return "取消消息免打扰用户时，该用户不存在当前设置中"
        }
        if error.code == 899045 {
            return "设置群组消息免打扰时，群组不存在该系统中"
        }
        if error.code == 899046 {
            return "设置群组消息免打扰时，设置的群组，用户不在该群组中"
        }
        if error.code == 899047 {
            return "已经设置此群组为消息免打扰，重复设置错误"
        }
        if error.code == 899048 {
            return "已经设置全局为消息免打扰，重复设置错误"
        }
        if error.code == 899049 {
            return "取消消息免打扰群组时，该群组不存在当前设置中"
        }
        if error.code == 899050 {
            return "已经设置全局为消息免打扰，重复设置错误"
        }
        if error.code == 899070 {
            return "添加的好友已经存在好友列表中"
        }
        if error.code == 899071 {
            return "更新的好友不存在好友列表中"
        }
        if error.code == 899030 {
            return "系统繁忙，稍后重试"
        }
        if error.code == 899081 {
            return "聊天室ID不存在"
        }
        if error.code == 899082 {
            return "用户不在聊天室中"
        }
        if error.code == 800003 {
            return "appkey未注册"
        }
        if error.code == 800005 {
            return "用户ID未注册（appkey无该UID）"
        }
        if error.code == 800006 {
            return "用户ID不存在（数据库中无该UID）"
        }
        if error.code == 800008 {
            return "请求类型无法识别"
        }
        if error.code == 800009 {
            return "服务器系统错误"
        }
        if error.code == 800012 {
            return "发起的用户处于登出状态，账号注册以后从未登录过，需要先登录"
        }
        if error.code == 800013 {
            return "发起的用户处于登出状态，请求的用户已经登出，需要先登录"
        }
        if error.code == 800014 {
            return "发起的用户appkey与目标不匹配"
        }
        if error.code == 800016 {
            return "发起的用户设备不匹配,当前请求的设备与上次登录的设备不匹配导致，需要先登录"
        }
        if error.code == 800017 {
            return "发送请求频率超过系统限制"
        }
        if error.code == 800018 {
            return "群组ID不存在"
        }
        if error.code == 800019 {
            return "请求用户不在群组中"
        }
        if error.code == 800020 {
            return "请求用户无操作权限"
        }
        if error.code == 801003 {
            return "登录的用户名未注册，登录失败"
        }
        if error.code == 801004 {
            return "登录的用户密码错误，登录失败"
        }
        if error.code == 801005 {
            return "登录的用户设备有误，登录失败"
        }
        if error.code == 801006 {
            return "登录的用户被禁用，登录失败"
        }
        if error.code == 801007 {
            return "多通道同时登录错误，登录失败"
        }
        if error.code == 802002 {
            return "登出用户名和登录用户名不匹配，登出失败"
        }
        if error.code == 803001 {
            return "发送消息失败，状态存储异常"
        }
        if error.code == 803002 {
            return "发送消息失败，系统网络异常"
        }
        if error.code == 803003 {
            return "发送消息失败，目标用户未注册或不存在"
        }
        if error.code == 803004 {
            return "发送消息失败，目标讨论组不存在"
        }
        if error.code == 803005 {
            return "发送消息失败，发起者不在目标讨论组中"
        }
        if error.code == 803006 {
            return "发送消息失败，发起者权限不够或者类别不匹配"
        }
        if error.code == 803007 {
            return "发送消息失败，消息长度超过限制"
        }
        if error.code == 803008 {
            return "发送消息失败，发送者已被接收者拉入黑名单，仅限单聊"
        }
        if error.code == 803009 {
            return "发送消息失败，消息内容包含敏感词汇：具体敏感词"
        }
        if error.code == 803010 {
            return "发送消息失败，发送频率超过系统限制，无法发送，客户端限制每分钟60条"
        }
        if error.code == 803011 {
            return "发送消息失败，消息格式配置错误"
        }
        if error.code == 803012 {
            return "发送消息失败，请求用户被管理员禁言"
        }
        if error.code == 805001 {
            return "目标用户不存在"
        }
        if error.code == 805002 {
            return "添加好友失败：双方已经是好友"
        }
        if error.code == 805003 {
            return "删除好友失败：目标用户并不是自己的好友"
        }
        if error.code == 805004 {
            return "修改好友备注失败：备注内容无效，无法修改"
        }
        if error.code == 805006 {
            return "添加好友失败：邀请事件无效"
        }
        if error.code == 808001 {
            return "创建群组时群名为空，创建群组失败"
        }
        if error.code == 808002 {
            return "用户无创建群组权限，创建群组失败"
        }
        if error.code == 808003 {
            return "用户拥有的群组数量已达上限,无法再创建"
        }
        if error.code == 808004 {
            return "群组名长度超出上限，创建群组失败"
        }
        if error.code == 808005 {
            return "群组描述长度超出上限，创建群组失败"
        }
        if error.code == 808006 {
            return "创建群组时指定成员人数上限错误"
        }
        if error.code == 810001 {
            return "目标用户在群组黑名单中，无法加入"
        }
        if error.code == 810002 {
            return "添加的成员列表为空"
        }
        if error.code == 810005 {
            return "添加的成员列表中包含未注册成员"
        }
        if error.code == 810007 {
            return "添加的成员列表中有成员重复添加"
        }
        if error.code == 810008 {
            return "添加的成员数量超出群组拥有的最大成员数上限"
        }
        if error.code == 810009 {
            return "添加的成员列表中有成员拥有的群组数量已达上限"
        }
        if error.code == 811002 {
            return "删除的成员列表为空"
        }
        if error.code == 811005 {
            return "删除的成员列表中有成员未注册"
        }
        if error.code == 811006 {
            return "删除的成员列表中有成员该用户没有权限进行删除"
        }
        if error.code == 811007 {
            return "删除的成员列表中有成员重复删除"
        }
        if error.code == 811008 {
            return "删除的成员列表中有成员不在该群组中"
        }
        if error.code == 812003 {
            return "群组名超出长度上限"
        }
        if error.code == 812004 {
            return "群组描述超出上限"
        }
        if error.code == 818001 {
            return "用户添加黑名单时，成员列表为空，添加失败"
        }
        if error.code == 818002 {
            return "用户添加黑名单时，成员列表中有成员不存在，添加失败"
        }
        if error.code == 818003 {
            return "用户添加黑名单时，成员列表中有成员不能被添加，添加失败"
        }
        if error.code == 818004 {
            return "重复添加"
        }
        if error.code == 818005 {
            return "超过黑名单最大限制"
        }
        if error.code == 818006 {
            return "目标用户列表中存在不允许加入黑名单的用户"
        }
        if error.code == 819001 {
            return "用户移除好友出黑名单时，成员列表为空，操作失败"
        }
        if error.code == 819002 {
            return "用户删除黑名单时，成员列表中有成员不存在，删除失败"
        }
        if error.code == 819003 {
            return "重复删除"
        }
        if error.code == 819004 {
            return "待删除的黑名单用户不在黑名单中"
        }
        if error.code == 831001 {
            return "用户添加成员消息免打扰时，该成员已处于免打扰状态"
        }
        if error.code == 832001 {
            return "用户删除成员消息免打扰时，该成员不处于免打扰状态"
        }
        if error.code == 833001 {
            return "用户添加群组消息免打扰时，该群组不存在"
        }
        if error.code == 833002 {
            return "用户添加群组消息免打扰时，用户不存在该群组中"
        }
        if error.code == 833003 {
            return "用户添加群组消息免打扰时，该群组已处于免打扰状态"
        }
        if error.code == 834001 {
            return "用户删除群组消息免打扰时，该群组不处于免打扰状态"
        }
        if error.code == 835001 {
            return "用户添加全局消息免打扰时，该用户已处于全局免打扰状态"
        }
        if error.code == 836001 {
            return "用户删除全局消息免打扰时，该用户不处于全局免打扰状态"
        }
        if error.code == 842001 {
            return "用户添加群组消息屏蔽时，该群组不存在"
        }
        if error.code == 842002 {
            return "用户添加群组消息屏蔽时，用户不在该群组中"
        }
        if error.code == 842003 {
            return "用户添加群组消息屏蔽时，该群组已处于消息屏蔽状态"
        }
        if error.code == 843001 {
            return "用户删除群组消息屏蔽时，该群组不处于消息屏蔽状态"
        }
        if error.code == 847001 {
            return "发送聊天室消息失败，发起者不在该聊天室中"
        }
        if error.code == 847002 {
            return "发送聊天室消息失败，发起者在该聊天室中被禁言"
        }
        if error.code == 847003 {
            return "发送聊天室消息失败，该聊天室不存在"
        }
        if error.code == 847004 {
            return "发送聊天室消息失败，消息长度超过限制"
        }
        if error.code == 847005 {
            return "发送聊天室消息失败，消息内容格式错误"
        }
        if error.code == 850001 {
            return "删除不存在的聊天室"
        }
        if error.code == 851001 {
            return "邀请成员到聊天室时，邀请的成员列表中有重复的成员，邀请失败"
        }
        if error.code == 851002 {
            return "邀请成员到聊天室时，邀请的成员列表中有未注册成员，邀请失败"
        }
        if error.code == 851003 {
            return "邀请或加入到聊天室时，邀请或加入的成员已在聊天室中，邀请或加入失败"
        }
        if error.code == 851004 {
            return "邀请或加入不存在的聊天室"
        }
        if error.code == 851005 {
            return "邀请成员到聊天室时，邀请的成员列表为空，邀请成员失败"
        }
        if error.code == 851006 {
            return "邀请或加入聊天时，邀请的人员数量超过聊天室剩余加入的人员数量"
        }
        if error.code == 851007 {
            return "邀请或加入聊天室时，邀请或加入的人员已被列入了黑名单"
        }
        if error.code == 852001 {
            return "踢出或退出聊天室时，该用户其实并不在该聊天室中，踢出或退出聊天室失败"
        }
        if error.code == 852002 {
            return "踢出或退出不存在的聊天室"
        }
        if error.code == 852003 {
            return "踢出成员到聊天室时，踢出的成员列表为空，踢出成员失败"
        }
        if error.code == 852004 {
            return "踢出或退出聊天室时，存在owner用户退出聊天室"
        }
        if error.code == 853001 {
            return "更新不存在的聊天室信息"
        }
        if error.code == 853002 {
            return "更新聊天室owner时，新的owner并不在该聊天室中"
        }
        if error.code == 855001 {
            return "消息撤回失败，超出撤回时间"
        }
        if error.code == 855002 {
            return "消息撤回失败，请求撤回方不是消息发送方"
        }
        if error.code == 855003 {
            return "消息撤回失败，请求撤回消息不存在"
        }
        if error.code == 855004 {
            return "消息撤回失败，该消息已经撤回"
        }
        if error.code == 856001 {
            return "审批失效，该添加成员邀请已经被处理"
        }
        if error.code == 856002 {
            return "请求数据无效"
        }
        if error.code == 857001 {
            return "目标群组不存在"
        }
        if error.code == 857002 {
            return "目标不在线"
        }
        if error.code == 857003 {
            return "目标用户不存在"
        }
        if error.code == 857004 {
            return "透传消息长度超过限制"
        }
        if error.code == 857005 {
            return "请求用户不在群组中"
        }
        if error.code == 857006 {
            return "目标不能为自己"
        }
        if error.code == 859001 {
            return "用户已经在目标群组中"
        }
        if error.code == 859002 {
            return "目标群组类型不支持申请入群"
        }
        if error.code == 786001 {
            return "群公告长度超出上限"
        }
        if error.code == 787001 {
            return "待删除公告不存在"
        }
        if error.code == 765001 {
            return "目标用户不在群组中"
        }
        if error.code == 765002 {
            return "请求用户无操作权限"
        }
        if error.code == 7130001 {
            return "用户没有权限设置管理员"
        }
        if error.code == 7130002 {
            return "设置为管理员的成员已经是管理员"
        }
        if error.code == 7130003 {
            return "设置为管理员的成员是个聊天室owner"
        }
        if error.code == 7130004 {
            return "超过管理员最大数量"
        }
        if error.code == 7130005 {
            return "聊天室不存在"
        }
        if error.code == 7130006 {
            return "设置为管理员的成员不在聊天室中"
        }
        if error.code == 7130007 {
            return "设置目标为空"
        }
        if error.code == 7131001 {
            return "用户没有权限删除管理员资格（只有owner才能删除管理员资格）"
        }
        if error.code == 7131002 {
            return "对不是管理员的用户删除其管理员资格"
        }
        if error.code == 7132001 {
            return "用户没有权限设置黑名单"
        }
        if error.code == 7132002 {
            return "owner不能被设为黑名单"
        }
        if error.code == 7132003 {
            return "管理员不能被设为黑名单"
        }
        if error.code == 7132004 {
            return "聊天室不存在"
        }
        if error.code == 7132005 {
            return "超过黑名单最大数量"
        }
        if error.code == 7132006 {
            return "添加黑名单的成员已在黑名单中"
        }
        if error.code == 7132007 {
            return "设置目标为空"
        }
        if error.code == 7133001 {
            return "删除黑名单的成员不在黑名单中"
        }
        if error.code == 7100001 {
            return "音视频信令通知目标用户为空或者目标已全部登出"
        }
        if error.code == 7100002 {
            return "音视频被邀请的用户已登出"
        }
        if error.code == 7100006 {
            return "音视频服务试用时长不够，停用"
        }
        //iOS -> SDK ErrorCode定义
        if error.code == 860015 {
            return "媒体文件下载失败"
        }
        if error.code == 860018 {
            return "媒体文件上传失败"
        }
        if error.code == 860020 {
            return "获取媒体文件上传 token 失败"
        }
        if error.code == 860021 {
            return "服务器端返回的数据非预期"
        }
        if error.code == 861004 {
            return "SDK数据库升级失败"
        }
        if error.code == 861100 {
            return "Appkey 不合法"
        }
        if error.code == 861101 {
            return "内部参数校验出错"
        }
        if error.code == 863001 {
            return "无效的用户名"
        }
        if error.code == 863002 {
            return "无效的密码"
        }
        if error.code == 863004 {
            return "用户未在登录状态"
        }
        if error.code == 863005 {
            return "请求用户数量超出限制（目前单次最大请求500个）"
        }
        if error.code == 863006 {
            return "重复登录的错误"
        }
        if error.code == 863007 {
            return " 用户正在退出的过程中"
        }
        if error.code == 863008 {
            return "添加好友失败"
        }
        if error.code == 863009 {
            return "删除好友失败"
        }
        if error.code == 864001 {
            return "不是媒体消息"
        }
        if error.code == 864002 {
            return "媒体资源意外丢失"
        }
        if error.code == 864003 {
            return "媒体CRC码无效"
        }
        if error.code == 864004 {
            return "媒体CRC校验失败"
        }
        if error.code == 864005 {
            return "上传的媒体文件意外丢失"
        }
        if error.code == 864007 {
            return "媒体文件Hash检验失败"
        }
        if error.code == 865001 {
            return "无效的消息内容"
        }
        if error.code == 865002 {
            return "消息为空"
        }
        if error.code == 865003 {
            return "消息未满足发送的条件"
        }
        if error.code == 865004 {
            return "你不是发送群聊消息的群组成员"
        }
        if error.code == 866001 {
            return "未知的会话类型"
        }
        if error.code == 866002 {
            return "单聊会话用户名无效"
        }
        if error.code == 866003 {
            return "群聊会话群组ID无效"
        }
        if error.code == 866005 {
            return "获取群聊会话头像失败"
        }
        if error.code == 867001 {
            return "无效的群组ID"
        }
        if error.code == 867002 {
            return "群组字段无效"
        }
        if error.code == 868001 {
            return "聊天室不支持"
        }
        if error.code == 868002 {
            return "聊天室不存在"
        }
        if error.code == 869999 {
            return "未知的SDK错误码"
        }
        return error.localizedDescription
       
    }
    
    

}
